/*
    题目：int A[nSize]，其中隐藏着若干0，其余非0整数，
    写一个函数int Func(int* A, int nSize)，使A把0移至后面，
    非0整数移至数组前面并保持有序，返回值为原数据中第一个元素为0的下标。
    (尽可能不使用辅助空间且考虑效率及异常问题，注释规范且给出设计思路)
*/

// #include #include int cLine(int *A, int nSize){static unsigned int i = 0, j = 0; while ((nSize != j) && (j <= nSize)){while (A[i] != 0){i++; } j = i + 1; while (A[j] == 0){j++; } A[i] = A[j]; A[j] = 0; i++; } A[i - 1] = 0; return i - 1; } int main(){static unsigned int i, index; int A[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 0, 9, 0, 3, 1, 0, 0, 0, 3, 1 }; for (i = 0; i < (sizeof(A) / sizeof(int)); i++){printf("%d,", A[i]); } printf("\n"); index = cLine(A, sizeof(A) / sizeof(int)); for (i = 0; i < (sizeof(A) / sizeof(int)); i++){printf("%d,", A[i]); } printf("\n"); printf("第一个元素为0的下标: %d", index); }

#include <stdio.h>

int Func(int *A,int nSize)
{
    for(int i=0;i<nSize;i++)
    {
        if(A[i]==0)
        {
            for(int j=i+1;j<nSize;j++)
            {
                if(A[j]!=0)
                {
                    A[i] = A[j];
                    A[j] = 0;
                    break;
                }
            }
        }
    }
}


int main(int argc, char const *argv[])
{
    int A[50]={0};

    printf("请输入一串数字：");
    for(int i=0;i<50;i++)
    {
        scanf("%d",&A[i]);
        if(getchar()=='\n')
            break;
    }
    
    printf("\n输入的数组是:");
    for(int i=0;i<50;i++)    
        printf("%d ",A[i]);
    
    Func(A,50);
    printf("\n转换后的数组是：");
    for(int i=0;i<50;i++)    
        printf("%d ",A[i]);

    return 0;
}


